package com.ruoyi.project.game.tag.service.impl;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.text.Convert;
import com.ruoyi.framework.aspectj.lang.annotation.DataSource;
import com.ruoyi.framework.aspectj.lang.enums.DataSourceType;
import com.ruoyi.project.game.tag.domain.Tag;
import com.ruoyi.project.game.tag.mapper.TagMapper;
import com.ruoyi.project.game.tag.service.ITagService;

/**
 * 游戏标签Service业务层处理
 * 
 * @author shixiangwen
 * @date 2020-02-11
 */
@Service
@DataSource(value = DataSourceType.GAME)
public class TagServiceImpl implements ITagService {

	@Autowired
	private TagMapper tagMapper;

	/**
	 * 查询游戏标签
	 * 
	 * @param id 游戏标签ID
	 * @return 游戏标签
	 */
	@Override
	public Tag selectTagById(Long id) {
		return tagMapper.selectTagById(id);
	}

	/**
	 * 查询游戏标签列表
	 * 
	 * @param tag 游戏标签
	 * @return 游戏标签
	 */
	@Override
	public List<Tag> selectTagList(Tag tag) {
		return tagMapper.selectTagList(tag);
	}

	/**
	 * 新增游戏标签
	 * 
	 * @param tag 游戏标签
	 * @return 结果
	 */
	@Override
	public int insertTag(Tag tag) {
		tag.setCreateTime(DateUtils.getNowDate());
		return tagMapper.insertTag(tag);
	}

	/**
	 * 修改游戏标签
	 * 
	 * @param tag 游戏标签
	 * @return 结果
	 */
	@Override
	public int updateTag(Tag tag) {
		tag.setUpdateTime(DateUtils.getNowDate());
		return tagMapper.updateTag(tag);
	}

	/**
	 * 删除游戏标签对象
	 * 
	 * @param ids 需要删除的数据ID
	 * @return 结果
	 */
	@Override
	public int deleteTagByIds(String ids) {
		return tagMapper.deleteTagByIds(Convert.toStrArray(ids));
	}

	/**
	 * 删除游戏标签信息
	 * 
	 * @param id 游戏标签ID
	 * @return 结果
	 */
	@Override
	public int deleteTagById(Long id) {
		return tagMapper.deleteTagById(id);
	}

	@Override
	public List<Tag> selectTagsByGameId(Long gameId) {
		List<Tag> tags = tagMapper.selectTagList(new Tag());
		List<Tag> gameTags = tagMapper.selectTagsByGameId(gameId);
		Set<Long> gameTagIds = new HashSet<>();
		for (Tag tag : gameTags) {
			gameTagIds.add(tag.getId());
		}
		for (Tag tag : tags) {
			if (gameTagIds.contains(tag.getId())) {
				tag.setFlag(true);
			}
		}
		return tags;
	}

	@Override
	public List<Tag> selectAssoTagsByGameId(Long gameId) {

		List<Tag> tags = tagMapper.selectTagList(new Tag());
		List<Tag> assoTags = tagMapper.selectAssoTagsByGameId(gameId);
		Set<Long> assoTagIds = new HashSet<>();
		for (Tag tag : assoTags) {
			assoTagIds.add(tag.getId());
		}
		for (Tag tag : tags) {
			if (assoTagIds.contains(tag.getId())) {
				tag.setFlag(true);
			}
		}
		return tags;
	}

}
